package sn.gandal.agriculture.agrimobile.j2me.businessObjects;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author dysow
 */
public class Membre
{

    private int idRecord;
    private Date dateInscription;
    private int idAbonne;
    private String prenom;
    private String nom;
   
    private String telephone;
    private Date dateDeNaissance;
    
    private String sexe;
    
    private boolean isModified = false;
    private boolean isActif = true;
    private Date dateDesabonnement = new Date();
    
    /**
     * 
     * @param idRecord
     * @param dateInscription
     * @param idAbonne
     * @param prenom
     * @param nom
     * @param telephone
     * @param dateDeNaissance
     * @param sexe
     */
    public Membre(int idRecord, Date dateInscription, int idAbonne, String prenom, String nom, String telephone, Date dateDeNaissance, String sexe) {
        this.idRecord = idRecord;
        this.dateInscription = dateInscription;
        this.idAbonne = idAbonne;
        this.prenom = prenom;
        this.nom = nom;
        this.telephone = telephone;
        this.dateDeNaissance = dateDeNaissance;
        this.sexe = sexe;
    }

    public Membre() {
    }

    public Membre(int abonneId, String prenom, String nom) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

  

    /**
     * @return the idRecord
     */
    public int getIdRecord()
    {
	return idRecord;
    }

    /**
     * @param idRecord the idRecord to set
     */
    public void setIdRecord(int idRecord)
    {
	this.idRecord = idRecord;
    }

    /**
     * @return the dateInscription
     */
    public Date getDateInscription()
    {
	return dateInscription;
    }

    /**
     * @param dateInscription the dateInscription to set
     */
    public void setDateInscription(Date dateInscription)
    {
	this.dateInscription = dateInscription;
    }

    /**
     * @return the idAbonne
     */
    public int getIdAbonne()
    {
	return idAbonne;
    }

    /**
     * @param idAbonne the idAbonne to set
     */
    public void setIdAbonne(int idAbonne)
    {
	this.idAbonne = idAbonne;
    }

    /**
     * @return the prenom
     */
    public String getPrenom()
    {
	return prenom;
    }

    /**
     * @param prenom the prenom to set
     */
    public void setPrenom(String prenom)
    {
	this.prenom = prenom;
    }

    /**
     * @return the nom
     */
    public String getNom()
    {
	return nom;
    }

    public boolean isModified() {
        return isModified;
    }

    /**
     * @param nom the nom to set
     */
    public void setNom(String nom)
    {
	this.nom = nom;
    }

 
    public void setIsActif(boolean isActif)
    {
	this.isActif = isActif;
    }

    public void setIsModified(boolean isModified)
    {
	this.isModified = isModified;
    }

    /**
     * @param prenomPere the prenomPere to set
     */
  
    /**
     * @return the telephone
     */
    public String getTelephone()
    {
	return telephone;
    }

    /**
     * @param telephone the telephone to set
     */
    public void setTelephone(String telephone)
    {
	this.telephone = telephone;
    }

    /**
     * @return the dateDeNaissance
     */
    public Date getDateDeNaissance()
    {
	return dateDeNaissance;
    }

    /**
     * @param dateDeNaissance the dateDeNaissance to set
     */
    public void setDateDeNaissance(Date dateDeNaissance)
    {
	this.dateDeNaissance = dateDeNaissance;
    }


    /**
     * @return the sexe
     */
    public String getSexe()
    {
	return sexe;
    }

    /**
     * @param sexe the sexe to set
     */
    public void setSexe(String sexe)
    {
	this.sexe = sexe;
    }

    /**
     * @return the nomPayeur
     */
  


    public boolean isActif()
    {
	return this.isActif;
    }

    public void setModified(boolean bool)
    {
	this.isModified = bool;
    }

    public void setActif(boolean bool)
    {
	this.isActif = bool;
    }

    public Date getDateDesabonnement()
    {
	return this.dateDesabonnement;
    }

    public void setDateDesabonnement(Date dateDesabonnement)
    {
	this.dateDesabonnement = dateDesabonnement;
    }

  
    /**
     * Methode pour la serialization de la classe
     * @return byteArray - byte []
     */
    public byte[] serialize() throws IOException
    {
	ByteArrayOutputStream bout = new ByteArrayOutputStream();
	DataOutputStream dout = new DataOutputStream(bout);

	dout.writeInt(idAbonne);
	dout.writeUTF(nom);
	dout.writeUTF(prenom);
	
	dout.writeLong(dateDeNaissance.getTime());
	dout.writeUTF(sexe);
	
	dout.writeUTF(telephone);
	dout.writeLong(dateInscription.getTime());
	
	//ADD
	dout.writeLong(dateDesabonnement.getTime());
	
	//END

	dout.writeBoolean(this.isModified);

	dout.writeBoolean(this.isActif);//ADD

	dout.flush();
	dout.close();
	bout.close();

	return bout.toByteArray();
    }

    /**
     * Methode pour deserializer un objet de type Abonnes
     */
    public void deSerialize(byte[] data) throws IOException
    {
	ByteArrayInputStream bin = new ByteArrayInputStream(data);
	DataInputStream din = new DataInputStream(bin);

	idAbonne = din.readInt();
	nom = din.readUTF();
	prenom = din.readUTF();
	
	dateDeNaissance = new Date(din.readLong());
	sexe = din.readUTF();
	
	telephone = din.readUTF();
	dateInscription = new Date(din.readLong());
	
	//ADD
	dateDesabonnement = new Date(din.readLong());
	
	//END

	this.isModified = din.readBoolean();

	this.isActif = din.readBoolean();//ADD

	din.close();
	bin.close();
    }

    public String validerDetailsAbonne()
    {
	String error = "";

	error += this.validateDateNaissance();

	if (this.dateInscription == null)
	{
	    error += "\n- Date d'inscription obligatoire";
	}

	if (this.prenom.equals(""))
	{
	    error += "\n- Prenom Abonné obligatoire";
	}

	if (this.nom.equals(""))
	{
	    error += "\n- Nom Abonné obligatoire";
	}

	

	if (this.dateDeNaissance == null)
	{
	    error += "\n- Date naissance obligatoire";
	}

	
	if (this.sexe.equals(""))
	{
	    error += "\n- Sexe obligatoire";
	}

	

	return error;
    }

    private String validateDateNaissance()
    {
	String error = "";

	Calendar birthcal = Calendar.getInstance();

	if (this.dateDeNaissance != null)
	{
	    birthcal.setTime(this.dateDeNaissance);
	}

	Calendar calDateNaissance = Calendar.getInstance();

	if (this.dateDeNaissance != null)
	{
	    calDateNaissance.setTime(this.dateDeNaissance);
	}

	Date dateActuelle = new Date();
	Calendar calDateActuelle = Calendar.getInstance();
	calDateActuelle.setTime(dateActuelle);

	calDateNaissance.set(Calendar.YEAR, calDateNaissance.get(Calendar.YEAR) + 1);

	if (birthcal.after(calDateActuelle))
	{
	    error += "\n- La date de naissance n'est pas valide";
	}
	return error;

    }

    /**
     * Valider le jour de passage(coché pas ADP) selon la date de naissance
     * @return
     */
    public String validateDates()
    {
	String error = "";

	

	return error;
    }

    public String validerRechercheAbonne()
    {
	String error = "";

	if ((this.idAbonne < 0) && (this.nom.equals("")) && (this.prenom.equals("")))
	{
	    error += "\n- Aucun critère de recherche\n- Vous devez remplir au moins un champ";
	}

	if (this.idAbonne > 0)
	{
	    if ((Integer.toString(this.idAbonne).length()) < 8)
	    {

		error += "\n- Identifiant Abonné doit comprendre de 8 chiffres";
	    }
	}

	return error;
    }

    // afficher IdentifiantAbonne suivi de prenom
    public String getDisplay()
    {
	return this.idAbonne + " " + this.prenom;
    }

    public String validerChampsAbonne(String telephonePayeur, String telephone)
    {
	String error = "";

	if (telephonePayeur.length() == 0)
	{
	    error += "\n- Vous devez remplir les champs";
	}
	else if (!telephone.equals(""))
	{
	    //if (Integer.parseInt(telephone) < 0)
	    if (Long.parseLong(telephone) < 0)
	    {
		error += "\n- Téléphone doit avoir des numéros positifs";
	    }

	}

	return error;
    }

    public String validerChampsEditAbonne(String telephonePayeur, String telephone)
    {
	String error = "";
	
	char[] valid = new char[]{'1', '2','3','4','5','6','7','8','9','0','-',' '};

	if (telephonePayeur.length() == 0)
	{
	    error += "\n- Vous devez remplir les champs";
	}
	else if (!telephone.equals(""))
	{
	    for (int i = 0;i < telephone.length();i++)
	    {
		char c = telephone.charAt(i);
		if (!Character.isDigit(c))
		{
		    char charVar = '-';
		    char space = ' ';

		    if ((c != charVar) && (c != space))
		    {
			error = "\n- Téléphone ne doit pas contenir des charactère";			
		    }
		}
	    }
	}

	return error;
    }

    public String toString()
    {
	return "ID     : " + getIdAbonne() + " \n PRENOM : " + getPrenom() + " \n NOM    : " + getNom();
    }
}
